home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr05 / doshlp11.zip / DOSHELP.MS_ / DOSHELP.bin
Text File  |  1993-07-03  |  15KB  |  510 lines

  1. CONST cbSymValMax = 512
  2. CONST MB_OK          = 0
  3. CONST MB_ICONHAND    = 16
  4. CONST MB_TASKMODAL   = 8192
  5. CONST grcUserQuit   = 48
  6. CONST STFERR      = 1024  
  7. CONST STFQUIT     = 1025 
  8. CONST scmOff      = 0
  9. CONST scmOnIgnore = 1
  10. CONST scmOnFatal  = 2
  11. CONST grcOkay       = 0
  12. CONST grcNotOkay    = 1
  13. CONST ynrcNo         = 0
  14. CONST ynrcYes        = 1
  15. CONST ynrcErr1       = 2
  16. CONST ynrcErr2       = 3
  17. CONST ynrcErr3       = 4
  18. CONST ynrcErr4       = 5
  19. CONST ynrcErr5       = 6
  20. CONST ynrcErr6       = 7
  21. CONST ynrcErr7       = 8
  22. CONST ynrcErr8       = 9
  23. CONST ynrcErr9       = 10
  24. CONST femExists     = 0
  25. CONST femRead       = 1
  26. CONST femWrite      = 2
  27. CONST femReadWrite  = 3
  28. CONST cmoVital       = 1
  29. CONST cmoCopy        = 2
  30. CONST cmoUndo        = 4
  31. CONST cmoRoot        = 8
  32. CONST cmoDecompress  = 16
  33. CONST cmoTimeStamp   = 32
  34. CONST cmoReadOnly    = 64
  35. CONST cmoBackup      = 128
  36. CONST cmoForce       = 256
  37. CONST cmoRemove      = 512
  38. CONST cmoOverwrite   = 1024
  39. CONST cmoAppend      = 2048
  40. CONST cmoPrepend     = 4096
  41. CONST cmoNone        = 0
  42. CONST cmoAll         = 65535
  43. CONST SM_CXSCREEN = 0
  44. CONST SM_CYSCREEN = 1
  45. CONST WF_80x87    = 1024
  46. CONST WF_CPU186   =  128
  47. CONST WF_CPU286   =    2
  48. CONST WF_CPU386   =    4
  49. CONST WF_CPU486   =    8
  50. CONST WF_STANDARD =   16
  51. CONST WF_ENHANCED =   32
  52.  
  53.  
  54. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  55. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  56. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  57. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  58. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  59. DECLARE SUB SetTitle (sz$)
  60. DECLARE SUB ReadInfFile (szFile$)
  61. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  62. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  63. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  64. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  65. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  66. DECLARE SUB UIPop (n%)
  67. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  68. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  69. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  70. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  71. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  72. DECLARE SUB UIPopAll
  73. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  74. DECLARE SUB CreateDir (szDir$, cmo%)
  75. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  76. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  77. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  78. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  79. DECLARE SUB CloseLogFile
  80. DECLARE SUB WriteToLogFile (szStr$)
  81. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  82. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  83. DECLARE SUB CopyFilesInCopyList
  84. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  85. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  86. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  87. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  88. DECLARE FUNCTION GetWindowsDir  AS STRING
  89. DECLARE FUNCTION GetWindowsSysDir AS STRING
  90. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  91. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  92. DECLARE FUNCTION CbGetIniKeyString LIB "msdetstf.dll" (szFile$, szSect$, szKey$, szBuf$, cbBuf%) AS INTEGER
  93. DECLARE FUNCTION GetIniKeyString (szFile$, szSect$, szKey$) AS STRING
  94. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  95. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  96. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  97. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  98. DECLARE SUB InitInstall
  99.  
  100. CONST WELCOME       = 100
  101. CONST ASKQUIT       = 200
  102. CONST DESTPATH      = 300
  103. CONST EXITFAILURE   = 400
  104. CONST EXITQUIT      = 600
  105. CONST EXITSUCCESS   = 700
  106. CONST OPTIONS       = 800
  107. CONST APPHELP       = 900
  108. CONST BADPATH       = 6400
  109.  
  110. CONST LOGO = 1
  111.  
  112. GLOBAL DEST$   
  113.  
  114. DECLARE SUB Install
  115. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  116.  
  117. GLOBAL hSetup AS INTEGER
  118. GLOBAL fFrameInit AS INTEGER
  119. GLOBAL fInstallInit AS INTEGER
  120.  
  121. TRAP CleanupTrap From "MSSHLSTF.DLL"
  122.  
  123. End Trap
  124.  
  125. hSetup = InitSetup(COMMAND$)
  126.  
  127. ON ERROR GOTO QUIT
  128.  
  129. INIT:
  130.     CUIDLL$ = "mscuistf.dll"          
  131.     HELPPROC$ = "FHelpDlgProc"
  132.  
  133.     SetBitmap CUIDLL$, LOGO
  134.     SetTitle "Help in a Dos Box Setup"
  135.  
  136.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  137.     IF szInf$ = "" THEN
  138.     szInf$ = GetSymbolValue("STF_CWDDIR") + "DOSHELP.INF"
  139.     END IF
  140.     ReadInfFile szInf$
  141.  
  142.     DEST$ = "C:\DOSHELP"
  143.  
  144. WELCOME:
  145.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  146.     IF sz$ = "CONTINUE" THEN
  147.     UIPop 1
  148.     ELSE
  149.     GOSUB ASKQUIT
  150.     GOTO WELCOME
  151.     END IF
  152.  
  153. GETPATH:
  154.     SetSymbolValue "EditTextIn", DEST$
  155.     SetSymbolValue "EditFocus", "END"
  156. GETPATHL1:
  157.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  158.     DEST$ = GetSymbolValue("EditTextOut")
  159.  
  160.     IF sz$ = "CONTINUE" THEN
  161.     IF IsDirWritable(DEST$) = 0 THEN
  162.         GOSUB BADPATH
  163.         GOTO GETPATHL1
  164.     END IF
  165.     UIPop 1
  166.     ELSEIF sz$ = "REACTIVATE" THEN
  167.     GOTO GETPATHL1
  168.     ELSEIF sz$ = "BACK" THEN
  169.     UIPop 1
  170.     GOTO WELCOME
  171.     ELSE
  172.     GOSUB ASKQUIT
  173.     GOTO GETPATH
  174.     END IF
  175.  
  176.  
  177.     Install
  178.     ON ERROR GOTO JMPRDME
  179.     RUN "Write.exe " + MakePath(DEST$, "README.WRI"), NOWAIT
  180.     GOTO QUIT
  181.  
  182. JMPRDME:
  183.     ERR=0
  184.  
  185. QUIT:
  186.     ON ERROR GOTO ERRQUIT
  187.  
  188.     IF ERR = 0 THEN
  189.     dlg% = EXITSUCCESS
  190.     ELSEIF ERR = STFQUIT THEN
  191.     dlg% = EXITQUIT
  192.     ELSE
  193.     dlg% = EXITFAILURE
  194.     END IF
  195. QUITL1:
  196.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  197.     IF sz$ = "REACTIVATE" THEN
  198.     GOTO QUITL1
  199.     END IF
  200.     UIPop 1
  201.     END
  202.  
  203. ERRQUIT:
  204.     i% = DoMsgBox("Setup sources were corrupted!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  205.     END
  206.  
  207. BADPATH:
  208.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  209.     IF sz$ = "REACTIVATE" THEN
  210.     GOTO BADPATH
  211.     END IF
  212.     UIPop 1
  213.     RETURN
  214.  
  215. ASKQUIT:
  216.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  217.  
  218.     IF sz$ = "EXIT" THEN
  219.     UIPopAll
  220.     ERROR STFQUIT
  221.     ELSEIF sz$ = "REACTIVATE" THEN
  222.     GOTO ASKQUIT
  223.     ELSE
  224.     UIPop 1
  225.     END IF
  226.     RETURN
  227.  
  228.  
  229. SUB Install STATIC
  230.  
  231.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  232.     CreateDir DEST$, cmoNone
  233.  
  234.     OpenLogFile MakePath(DEST$, "SETUPLOG.TXT"), 0
  235.     WriteToLogFile ""
  236.     WriteToLogFile "Help in a Dos Box Set Up Log"
  237.     WriteToLogFile ""
  238.     WriteToLogFile ""
  239.     WriteToLogFile "  User chose as destination directory: '" + DEST$ + "'"
  240.     WriteToLogFile ""  
  241.  
  242.     AddSectionFilesToCopyList "Files", SrcDir$, DEST$
  243.     CopyFilesInCopyList
  244.     WriteToLogFile ""
  245.     WriteToLogFile ""
  246.     WriteToLogFile "This DOSHELP.INI setting is to set the initial setting of Help in a Dos Box to On"
  247.     CreateIniKeyValue MakePath(GetWindowsDir, "DOSHELP.INI"), "Settings", "Switch", "On", cmoOverwrite 
  248.     WriteToLogFile ""
  249.     WriteToLogFile ""
  250.     WriteToLogFile "The next two DOSHELP.INI settings are to enable Help in a Dos Box to find its two help files."
  251.     WriteToLogFile "  Default Help File is the file used when no Help Link specified"
  252.     CreateIniKeyValue MakePath(GetWindowsDir, "DOSHELP.INI"), "Settings", "Default Help File",  "GLOSSARY.HLP", cmoOverwrite
  253.     WriteToLogFile ""
  254.     WriteToLogFile "  Online Help is Help in a Dos Box's own help file (accessed in Control Panel)"
  255.     CreateIniKeyValue MakePath(GetWindowsDir, "DOSHELP.INI"), "Settings", "Online Help", MakePath(DEST$, "DOSHELP.HLP"), cmoOverwrite
  256.     WriteToLogFile ""
  257.     WriteToLogFile ""
  258.     WriteToLogFile "The last DOSHELP.INI setting just gets the ball rolling on the Help Links with the obvious one."
  259.     CreateIniKeyValue MakePath(GetWindowsDir, "DOSHELP.INI"), "Help Files", "MS-DOS Prompt", "GLOSSARY.HLP", cmoAppend
  260.     WriteToLogFile "  (This is somewhat redundant since if this links MS-DOS Prompt with the default help file)"
  261.     WriteToLogFile ""
  262.     WriteToLogFile ""
  263.     WriteToLogFile "This CONTROL.INI setting enables Help in a Dos Box to be loaded as a Control Panel Applet"
  264.     CreateIniKeyValue MakePath(GetWindowsDir, "CONTROL.INI"), "MMCPL", "Help in a Dos Box", MakePath(DEST$, "DOSHELP.DLL"), cmoOverwrite
  265.     WriteToLogFile "  {This line should be removed from CONTROL.INI if removing Help in a Dos Box from your system}"
  266.     WriteToLogFile ""
  267.     WriteToLogFile ""
  268.  
  269.     LOAD$ = GetIniKeyString(MakePath(GetWindowsDir, "WIN.INI"),"windows", "load")
  270.     nPos = INSTR(LOAD$,  "LDOSHELP.EXE")
  271.     IF  nPos <> 0 THEN
  272.       nCnt = nPos
  273.       WHILE ((nCnt>1)*(MID$(LOAD$, nCnt,1)<>" "))
  274.         nCnt=nCnt-1
  275.       WEND
  276.       IF nCnt<2 THEN
  277.         LOAD$=MID$(LOAD$, nPos+13)
  278.       ELSE
  279.         LOAD$ = MID$(LOAD$,1,nCnt)+MID$(LOAD$, nPos+13)
  280.       ENDIF
  281.     ENDIF
  282.  
  283.     WriteToLogFile "This WIN.INI setting causes LDOSHELP.EXE to be run when Windows starts."
  284.     WriteToLogFile "  (If the Help in a Dos Box setting (in DOSHELP.INI) is On, LDOSHELP.EXE initialises the Help in a Dos Box DLL.)"
  285.     CreateIniKeyValue MakePath(GetWindowsDir, "WIN.INI"), "windows", "load", MakePath(DEST$, "LDOSHELP.EXE") + " " + LOAD$, cmoOverwrite
  286.     WriteToLogFile "  {The instruction to load LDOSHELP.EXE should be removed from this line in WIN.INI"
  287.     WriteToLogFile "    if removing Help in a Dos Box from your system}"
  288.  
  289.     WriteToLogFile ""
  290.     WriteToLogFile ""
  291.     WriteToLogFile "Set Up Complete"
  292.     CloseLogFile
  293.  
  294.     RUN MakePath(DEST$, "LDOSHELP.EXE")
  295. END SUB
  296.  
  297.  
  298. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  299.     IF szDir$ = "" THEN
  300.     MakePath = szFile$
  301.     ELSEIF szFile$ = "" THEN
  302.     MakePath = szDir$
  303.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  304.     MakePath = szDir$ + szFile$
  305.     ELSE
  306.     MakePath = szDir$ + "\" + szFile$
  307.     END IF
  308. END FUNCTION
  309.  
  310. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  311.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  312.     ERROR STFERR
  313.     END IF
  314. END SUB
  315.  
  316. FUNCTION GetWindowsSysDir STATIC AS STRING
  317.     szBuf$ = string$(256, 32)
  318.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  319.  
  320.     IF cbBuf% = 0 THEN
  321.     ERROR STFERR
  322.     ELSE
  323.     IF cbBuf% > 255 THEN
  324.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  325.         ERROR STFERR
  326.     END IF
  327.     szBuf$ = RTRIM$(szBuf$)
  328.     IF MID$(szBuf$, 1, 1) = "\" THEN
  329.         szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  330.     ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  331.         szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  332.     END IF
  333.     IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  334.         szBuf$ = szBuf$ + "\"
  335.     END IF
  336.     GetWindowsSysDir = szBuf$
  337.     END IF
  338.  
  339.     szBuf$ = ""
  340. END FUNCTION
  341.  
  342. FUNCTION GetWindowsDir STATIC AS STRING
  343.     szBuf$ = string$(256, 32)
  344.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  345.  
  346.     IF cbBuf% = 0 THEN
  347.     GetWindowsDir = ""
  348.     ERROR STFERR
  349.     ELSE
  350.     IF cbBuf% > 255 THEN
  351.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  352.         ERROR STFERR
  353.     END IF
  354.     szBuf$ = RTRIM$(szBuf$)
  355.     IF MID$(szBuf$, 1, 1) = "\" THEN
  356.         'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  357.         szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  358.     ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  359.         szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  360.     END IF
  361.     IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  362.         szBuf$ = szBuf$ + "\"
  363.     END IF
  364.     GetWindowsDir = szBuf$
  365.     END IF
  366.  
  367.     szBuf$ = ""
  368. END FUNCTION
  369.  
  370. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  371.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  372.     ERROR STFERR
  373.     END IF
  374. END SUB
  375.  
  376. SUB CopyFilesInCopyList STATIC
  377.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  378.  
  379.     IF grc% = grcUserQuit THEN
  380.     ERROR STFQUIT
  381.     ELSEIF grc% > 0 THEN
  382.     ERROR STFERR
  383.     END IF
  384. END SUB
  385.  
  386. SUB CloseLogFile STATIC
  387.     IF FCloseLogFile() = 0 THEN
  388.     ERROR STFERR
  389.     END IF
  390. END SUB
  391.  
  392. SUB WriteToLogFile (szStr$) STATIC
  393.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  394.     ERROR STFERR
  395.     END IF
  396. END SUB
  397.  
  398. SUB OpenLogFile (szFile$, fAppend%) STATIC
  399.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  400.     ERROR STFERR
  401.     END IF
  402. END SUB
  403.  
  404. SUB CreateDir (szDir$, cmo%) STATIC
  405.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  406.     ERROR STFERR
  407.     END IF
  408. END SUB
  409.  
  410. SUB UIPop (n%) STATIC
  411.     IF FKillNDialogs(n%) = 0 THEN
  412.     ERROR STFERR
  413.     END IF
  414. END SUB
  415.  
  416. SUB UIPopAll STATIC
  417.     IF FKillNDialogs(65535) = 0 THEN
  418.     ERROR STFERR
  419.     END IF
  420. END SUB
  421.  
  422. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  423.     IsDirWritable = FIsDirWritable(szDir$)
  424. END FUNCTION
  425.  
  426. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  427.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  428.     ERROR STFERR
  429.     END IF
  430. END SUB
  431.  
  432. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  433.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  434.     ERROR STFERR
  435.     ELSE
  436.     UIStartDlg = GetSymbolValue("DLGEVENT")
  437.     END IF
  438. END FUNCTION
  439.  
  440. SUB SetBitmap(szDll$, Bitmap%) STATIC
  441.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  442.      ERROR STFERR
  443.     END IF
  444. END SUB
  445.  
  446. SUB ReadInfFile (szFile$) STATIC
  447.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  448.     ERROR STFERR
  449.     END IF
  450. END SUB
  451.  
  452. SUB SetTitle(sz$) STATIC
  453.     SetWindowText HwndFrame(), sz$
  454. END SUB
  455.  
  456. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  457.     szValue$ = string$(cbSymValMax,32)
  458.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  459.     GetSymbolValue = szValue$
  460.     IF Length% >= cbSymValMax THEN
  461.     res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  462.     ERROR STFERR
  463.     END IF
  464.     IF szSymbol$ = "" THEN
  465.     ERROR STFERR
  466.     END IF
  467.     szValue$ = ""
  468. END FUNCTION
  469.  
  470. FUNCTION GetIniKeyString (szFile$, szSect$, szKey$) STATIC  AS STRING
  471.     cb% = 512
  472.     szBuf$ = STRING$(cb%, 32)
  473.     cbRet% = CbGetIniKeyString(szFile$, szSect$, szKey$, szBuf$, cb%)
  474.     GetIniKeyString = szBuf$
  475. END FUNCTION
  476.  
  477. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  478.     fFrameInit = 0
  479.     fInstallInit = 0
  480.  
  481.     i% = InitFrame(szCmdLine$)
  482.     fFrameInit = 1
  483.  
  484.     InitInstall
  485.     fInstallInit = 1
  486.  
  487.     InitSetup = i%
  488. END FUNCTION
  489.  
  490. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  491.     IF hSetup > 0 THEN
  492.     ELSE
  493.     i% = InitializeFrame(szCmdLine$)
  494.     IF i% = -1 THEN
  495.         END   '' NOT an error - Usage (/?) or Command line copy operation
  496.     ELSEIF i% = 0 THEN
  497.         END
  498.     ELSE
  499.         InitFrame = i%
  500.     END IF
  501.     END IF
  502. END FUNCTION
  503.  
  504. SUB InitInstall STATIC
  505.     IF hSetup > 0 THEN
  506.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  507.     END
  508.     END IF
  509. END SUB
  510.